001    /*
002     * Copyright 2004 Stephen J. McConnell.
003     *
004     * Licensed  under the  Apache License,  Version 2.0  (the "License");
005     * you may not use  this file  except in  compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *   http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed  under the  License is distributed on an "AS IS" BASIS,
012     * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY KIND, either  express  or
013     * implied.
014     *
015     * See the License for the specific language governing permissions and
016     * limitations under the License.
017     */
018    
019    package net.dpml.metro.info;
020    
021    import net.dpml.lang.Enum;
022    
023    /**
024     * Collection policy enummeration.
025     * @author <a href="http://www.dpml.net">Digital Product Meta Library</a>
026     * @version 1.0.1
027     */
028    public final class CollectionPolicy extends Enum
029    {
030        //-------------------------------------------------------------------
031        // static
032        //-------------------------------------------------------------------
033    
034       /**
035        * Serial version identifier.
036        */
037        static final long serialVersionUID = 1L;
038    
039       /**
040        * Weak collection policy.
041        */
042        public static final CollectionPolicy WEAK = new CollectionPolicy( "weak" );
043    
044       /**
045        * Soft collection policy.
046        */
047        public static final CollectionPolicy SOFT = new CollectionPolicy( "soft" );
048    
049       /**
050        * Hard collection policy.
051        */
052        public static final CollectionPolicy HARD = new CollectionPolicy( "hard" );
053    
054       /**
055        * Collection policy to be established at system discretion.
056        */
057        public static final CollectionPolicy SYSTEM = new CollectionPolicy( "system" );
058            
059       /**
060        * Array of static activation policy enumeration values.
061        */
062        private static final CollectionPolicy[] ENUM_VALUES = 
063          new CollectionPolicy[]{WEAK, SOFT, HARD, SYSTEM};
064    
065       /**
066        * Returns an array of activation enum values.
067        * @return the activation policies array
068        */
069        public static CollectionPolicy[] values()
070        {
071            return ENUM_VALUES;
072        }
073            
074       /**
075        * Internal constructor.
076        * @param label the enumeration label.
077        */
078        private CollectionPolicy( String label )
079        {
080            super( label );
081        }
082       
083       /**
084        * Parse the supplied name.
085        * @param value the value to parse
086        * @return the collection policy
087        */
088        public static CollectionPolicy parse( String value )
089        {
090            if( value.equalsIgnoreCase( "hard" ) )
091            {
092                return HARD;
093            }
094            else if( value.equalsIgnoreCase( "soft" ) )
095            {
096                return SOFT;
097            }
098            else if( value.equalsIgnoreCase( "weak" ) )
099            {
100                return WEAK;
101            }
102            else if( value.equalsIgnoreCase( "system" ) )
103            {
104                return SYSTEM;
105            }
106            else
107            {
108                final String error =
109                  "Unrecognized collection policy argument [" + value + "]";
110                throw new IllegalArgumentException( error );
111            }
112        }
113    }